package com.mycode.netty;

import io.netty.bootstrap.Bootstrap;
import io.netty.channel.Channel;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.string.StringEncoder;

import java.net.InetSocketAddress;

public class EventLoopClient {

    public static void main(String[] args) throws InterruptedException {
        // 1. 启动类
        Channel channel = new Bootstrap()
                // 2. 添加 EventLoop
                .group(new NioEventLoopGroup())
                // 3. 选择客户端 channel 实现
                .channel(NioSocketChannel.class)
                // 4. 选择处理器
                .handler(new ChannelInitializer<NioSocketChannel>() {
                    // 5.在连接建立后被调用
                    @Override
                    protected void initChannel(NioSocketChannel ch) throws Exception {
                        // 6.添加编码器,传过来的都是 ByteBuf 需要先解码
                        ch.pipeline().addLast(new StringEncoder());
                    }
                })
                // 7.指定要连接的服务器和端口
                .connect(new InetSocketAddress("localhost", 8080))
                // 8. Netty 很多方法都是异步的，比如: connect() ,所以这里需要使用 sync() 方法等待 connect 建立连接完毕
                .sync()
                // 9. 获取 channel 对象，可以进行数据读写操作
                .channel();

        System.out.println(channel);
    }
}
